/**
 * @file hiddenType.c
 * @brief Implementa le funzioni per gestire le strutture dati definite
 * in hiddenType.h il corrispettivo header.
 *
 * Sono presenti le funzioni per gestire la struttura HiddenType.
 *
 * @date Mar 16, 2012
 * @author Francesco Corvino
 */
#include "hiddenType.h"

void * HiddenType_executeInterpreter(HiddenType* ht, void * context){
	return (*ht->interpretfnc)(ht->hiddentype, context);
}

/**
 * @brief Esecutore dell'interpretazione delle informazioni presenti in un <code>HiddenType</code>.
 * Interpretatore utilizzato nel caso di dichiarazioni del tipo
 * <code>HiddenType = String | char* (*fn)(void * context) </code>
 * @param value valore dell'hidden type
 * @param context contesto dell'hidden type: se impostato a NULL definisce di non utilizzare la funzione interpretatrice.
 */
char* getHiddenTypeToString(void * value, void * context){
	if(context==NULL) {
		return (char*) value;
	} // interpreta il campo value come un puntatore a funzione char* (*fnc)(void*)
	char* (*some_func)() = (char* (*)(void*)) value;
	return (char*) (*some_func)(context);
}
